<template>
	<view class="page">
		<view class="userinfobox flex u-font-28 u-p-54">
			<image :src="info.avatar" class="w114 h114" mode=""></image>
			<view class="u-m-l-44">
				<text>{{info.name}}</text>
				<view class="u-m-t-10">
					{{info.mobile}}
				</view>
				<view class="u-m-t-10">
					订阅对应设备后即可接听门禁通话~
				</view>
			</view>
		</view>
		<view class="house u-radius-5 u-font-28 u-p-18" v-for="i in snlist">
			<view class="flex-between">
				<view class="flex-center">
					<image src="../../static/zxcimg/dy.png" class="w36 h36 u-shrink-no u-m-r-16" mode=""></image>
					<text>{{i.addr1}}</text>
				</view>
				<view class="role u-radius-5 u-shrink-no">
					{{i.role_name}}
				</view>
			</view>
			<view class="u-m-t-16 flex-between">
				<view class="flex-center">
					<image src="../../static/zxcimg/mph.png" class="w36 u-shrink-no h36 u-m-r-16" mode=""></image>
					<text>{{i.room_name}}</text>
					<text class="u-m-l-10">{{i.access_name}}</text>

				</view>
			</view>
			<view class="flex-between" v-if="i.is_show_sn">
				<view class=" ">
					sn:{{i.sn}}
				</view>
				<view class="u-shrink-no flex">
					<button class="" size="mini" @click="getoption(i)" v-if="i.status==0">
						未订阅
					</button>
					<view class="" v-else>
						已订阅
					</view>
				</view>
			</view>
			<view class="" style="float: right; " v-else>
				<button class="" size="mini" @click="getoption(i)" v-if="i.status==0">
					未订阅
				</button>
				<view class="" v-else>
					已订阅
				</view>
			</view>

		</view>
		<getavatar :show='show' @close='show=false'></getavatar>


	</view>
</template>

<script>
	export default {
		data() {
			return {
				info: {},
				show: false,
				optioninfo: {},
				isok: false,
				snlist: [],
				mjlist: []
			};
		},
		onShow() {
			this.$api.get('/user/info').then(res => {
				this.info = res.data
				if (!res.data.mobile) {
					this.show = true
				}
			})
			this.getsnlist()
		},
		onLoad() {
		},
		methods: {

			//获取授权过的列表
			getok() {
				let that = this
				wx.getDeviceVoIPList({
					success(res) {
						console.log('[getDeviceVoIPList]', res.list)
						if(res.list.length>0){
							that.snlist.forEach(itemB => {
								const itemA = res.list.find(itemA => itemA.sn === itemB.sn);
								if (itemA) {
									itemB.status = itemA.status; // 更新status
									that.$api.post('/user_house/update_subscribe',{
										form:{
											id:itemB.id,
											status:itemA.status
										}
									}).then(res=>{
										
									})
								}
							});
						}
					
						// [{sn: 'xxx', model_id: 'xxx', status: 0}]
						// status: 0/未授权；1/已授权
					},
				})
			},
			//获取视频门禁参数
			getoption(i) {
				uni.showLoading({
					title: '请稍后',
					mask: true
				})
				this.$api.get('/passport/getDeviceVoIP', {
					sn:i.sn
				}).then(res => {
					this.optioninfo = res.data
					if (this.optioninfo) {
						this.book(i)
					}
				})
			},
			//获得sn列表
			getsnlist() {
				this.$api.get('/passport/getSnList').then(res => {
					this.snlist = res.data
					this.getok()
				})
			},
			book(i) {
				var that = this
				uni.hideLoading()

				// wx.requestSubscribeMessage({
				//   tmplIds: ['your_template_id'], // 替换为你的模板 ID
				//   success(res) {
				//     console.log('订阅通知返回结果：', res);
				//     if (res['your_template_id'] === 'accept') {
				//       console.log('用户已订阅通知');
				//     } else if (res['your_template_id'] === 'reject') {
				//       console.log('用户拒绝订阅通知');
				//     } else if (res['your_template_id'] === 'cancel' || res['your_template_id'] === undefined) {
				//       console.log('用户点击了返回，未选择同意或拒绝');
				//     } else {
				//       console.log('其他情况：', res['your_template_id']);
				//     }
				//   },
				//   fail(err) {
				//     console.log('订阅通知失败：', err);
				//   }
				// });
				
				wx.requestDeviceVoIP({
					sn:i.sn, //向用户发起通话的设备 sn(需要与设备注册时一致）
					snTicket: that.optioninfo.snTicket, //获取的 snTicket
					modelId: that.optioninfo.modelId, // 「设备接入」 从微信公众平台获取的model_id
					deviceName: that.optioninfo.deviceName, //设备名称，用于授权时显示给用户
					success(res) {
						console.log('requestDeviceVoIP success:', res)
						that.$api.post('/user_house/update_subscribe',{
							form:{
								id:i.id,
								status:1
							}
						}).then(res=>{
							
						})
						that.getok()
					},
					fail(err) {
						if (err.errCode === 10001) { // 用户点击返回
							console.log('用户点击了返回，未选择同意或拒绝');
							wx.showToast({
								title: '授权取消',
								icon: 'none'
							});
						} else if (err.errCode == 10021) {
							uni.showModal({
								title: '提示',
								content: '1、点击右上角 “...”,2、点击底部弹出窗的 “设置”,3、点击“语音、视频通话提醒”,4、在列表中右侧点击开启',
								success: function(res) {
									if (res.confirm) {
										console.log('用户点击确定');
									} else if (res.cancel) {
										console.log('用户点击取消');
									}
								}
							})
						} else {
							console.error('授权失败', err);
							wx.showToast({
								title: '授权失败，请重试',
								icon: 'none'
							});
						}
						// that.$toast('请在设置中手动开启~')

					},

				})
				return
				uni.getSetting({
					success(res) {
						if (!res.authSetting['scope.record']) {
							// 用户未授权或已拒绝授权
							uni.showModal({
								title: '提示',
								content: '需要您授权音视频通话权限，是否前往设置页面开启？',
								success(modalRes) {
									if (modalRes.confirm) {
										// 用户点击“确定”，打开设置页面
										uni.openSetting({
											success(settingRes) {
												if (settingRes.authSetting['scope.record']) {
													// 用户在设置页面开启了权限
													// 可以再次尝试调用 requestDeviceVoIP
												} else {
													// 用户仍未开启权限
													uni.showToast({
														title: '授权失败，请手动开启权限',
														icon: 'none'
													});
												}
											}
										});
									}
								}
							});
						} else {
							// 用户已授权，可以正常调用 requestDeviceVoIP
							wx.requestDeviceVoIP({
								sn: this.optioninfo.sn, //向用户发起通话的设备 sn(需要与设备注册时一致）
								snTicket: this.optioninfo.this.optioninfo.sn, //获取的 snTicket
								modelId: this.optioninfo.modelId, // 「设备接入」 从微信公众平台获取的model_id
								deviceName: this.optioninfo.deviceName, //设备名称，用于授权时显示给用户
								success(res) {
									console.log('requestDeviceVoIP success:', res)
								},
								fail(err) {
									console.error('requestDeviceVoIP fail:', err)
								},
							})
						}
					}
				});
			}
		}
	}
</script>

<style lang="scss" scoped>
	.page {
		background-color: #FAFAFA;
		min-height: calc(100vh - var(--window-top) - var(--window-bottom));
	}

	.userinfobox {
		background-color: #409EFF;
		align-items: center;
		color: #fff;
	}

	.house {
		width: 710rpx;
		margin: 30rpx auto;
		background-color: #fff;
		box-sizing: border-box;

		.role {
			background-color: #E2F2FF;
			padding: 2px 4px;
			color: #409EFF;
		}
	}
</style>